package redis

type dictht struct {
	// 哈希表数组
	table []*dictEntry
	// 哈希表大小, table大小,总得容量
	size uint32
	// 方便计算
	// 哈希表大小掩码，用于计算索引值
	// 总是等于 size - 1
	sizeMask uint32
	// 哈希表已有节点(键值对)数量
	used uint32
}

type dictEntry struct {
	// 键
	key interface{}
	// 值
	val interface{}
	// 向下一个哈希节点,形成链表,插入头插法
	next *dictEntry
}

type hashFunc func(key string) (hash uint32)

type dict struct {
	// MurmurHash2 http://code.google.com/p/smhasher/
	type1    hashFunc
	privdata interface{}

	// 哈希表两个, ht[1] 只会在对ht[0] rehash时使用
	ht [2]*dictht

	// 不在进行哈希重置时为-1
	rehashidx int
}

func (d *dict) GetIndex(key string) (index uint32) {
	hash := d.type1(key)
	index = hash & d.ht[0].sizeMask
	return index
}
